需求分析
RK 默认的声卡 RT5651(Card 0)是从耳机(device 0)输出。
但是我们的产品上同时具有 Speaker 和 Headphone,两者无法切换。
所以需要实现默认从喇叭输出,插上耳机的情况下从耳机输出的功能。
实现方式
查阅原理图
HP_DET_H 为耳机状态检测脚。
SPK_CTL_H 为控制 Speaker 使能管脚。
所以整个的逻辑很简单即
HP_DET_H 检测耳机状态
————> 为高 耳机插入,拉底 SPK_CTL_H 禁能喇叭
————> 为低 耳机拔出,拉高 SPK_CTL_H 使能喇叭
进行编码
dts 中添加相应 GPIO,并打开声卡驱动
1 | diff --git a/arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts b/arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts |
修改 snd_soc_card 结构体添加相关成员变量
1 | diff --git a/include/sound/soc.h b/include/sound/soc.h |
添加驱动代码
1 | diff --git a/sound/soc/rockchip/rockchip_rt5651_tc358749x.c b/sound/soc/rockchip/rockchip_rt5651_tc358749x.c |